剑指Offer 47 不用加减乘除做加法

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路

  1. 依靠位运算,其实真的很巧妙对于+运算,难点其实就在进位运算;
    (101+10001)不考虑进位就是=10100;就是异或运算,只有一个1一个0才等于1;然后考虑进位,两个都是1才可能产生进位;也就是与运算;然后在左移一位即可;

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
static public int Add1(int num1,int num2)
{
int sum;
int carry;
while (num2!= 0)
{
sum =num1 ^num2 ; //异或,不算进位的结果
carry = (num1 & num2) <<1; //两个都是1就会进位,然后右移一位;
num1 = sum;
num2 = carry; //进位如果不是零就可以跳出了
}
return num1;
}

收获

  1. 奇特的加法运算;